package queue;

import java.util.LinkedList;
import java.util.Queue;

//                                          用两个队列实现栈
class MyStack {
    //1.先准备两个队列 A 和 B
    Queue<Integer> A = new LinkedList<>();
    Queue<Integer> B = new LinkedList<>();
    public MyStack() {

    }
    //2.入栈则往队列 A 中入队列
    public void push(int x) {
        A.offer(x);
    }
    public int pop() {
        //考虑 A 为空的情况
        if (empty()){
            return 0;
        }
        //3.出栈则先把 A 依次出队列 然后 依次入队列到 B 中
        //直到 A 中的元素剩下最后一个 ，则直接出队列，且最后一个元素就是出栈的元素
        while (A.size() > 1){
            int val = A.poll();
            B.offer(val);
        }
        int ret = A.poll();
        //最后需要把队列 A 和 队列 B 交换一下
        Swap();
        return ret;
    }
    //同理
    public int top() {
        if (empty()){
            return 0;
        }
        while (A.size() > 1){
            int val = A.poll();
            B.offer(val);
        }
        int ret = A.poll();
        B.offer(ret);
        Swap();
        return ret;
    }

    public boolean empty() {
        return A.isEmpty();
    }

    //交换两个队列
    public void Swap(){
        Queue<Integer> tmp = null;
        tmp = A;
        A = B;
        B = tmp;
    }
}
